Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wywolanie funkcji php przez <a, z uzyciem JS
daggerski
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 29.12.2010

Ostrzeżenie: (0%)
-----


Witam mam skrypt up.php

  1. mysql_connect("localhost", "root", "haslo")or die("Nie można nawiązać połączenia z bazą");
  2. mysql_select_db("db")or die("Wystąpił błąd podczas wybierania bazy danych");
  3.  
  4.  
  5.  
  6. $id = $_GET['id'];
  7. $pt = $_GET['pt'] + 1;
  8. echo $id;
  9. echo $pt;
  10.  
  11. $pytanie = "UPDATE obrazki SET punkty=".$pt." WHERE id=".$id."" ;
  12. mysql_query($pytanie);
  13. header("Location: index.php");


skrypt dostaje z index.php po kliknieciu na button getem dwie zmeinne, zmienna id oraz zmienna pt. do zmiennej pt dodaje jeden i zapisuje do bazy ten wynik.

odpowiada za to ta linijka w index.php
  1. <div class="thumbs"> <li><a href="up.php?id='.$row[0].'&pt='.$row[6].'">


Jednak chcialbym to troszke upiekszyc, a najlepiej byloby, aby umiescic ten skrypt dodajacy punkta do index.php a nie do osbnego pliku i wywolywac go javascriptem po nacisnieciu buttona niestety raczkuje w tematyce javascriptu, probowalem cos tam w jquery, a czasu nie mam, aby sie od podstaw uczyc bo przed sylwestrem musze skonczyc a to wlasciwie ostatnia rzecz, ktora mi zostala do zrobienia. Prosze o pomoc. I przepraszam za polskie znaki, ale nie posiadam polskiej czcionki.

Ten post edytował daggerski 29.12.2010, 16:28:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Moli
post
Post #2





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Użyj ajaxa, inaczej tego nie zrobisz (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
daggerski
post
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 29.12.2010

Ostrzeżenie: (0%)
-----


A czy moglbys przytoczyc jakis krotki wzor jak to zrobic bo takze z ajaxem cieniutku u mnie...
Go to the top of the page
+Quote Post
amii
post
Post #4





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


OK w ramach prezentu świątecznego prawie gotowiec z wyjaśnieniami

Funkcja ajax to instrukcja uruchamiająca AJAX z odpowiednimi parametrami u siebie wywołujesz to np tak:
Żeby ustawić parametry dla index.php to albo JS -> http://forum.php.pl/index.php?showtopic=52...rt=#entry286748
albo bezpośrednio z PHP do wyboru do koloru (IMG:style_emoticons/default/smile.gif)
To jak rozumiem -> <div class="thumbs"> <li><a href="up.php?id='.$row[0].'&pt='.$row[6].'"> ma być przesłane jako parametry więc sobie z tym pokombinuj

Plik index.php
  1. function polacz() {
  2. mysql_connect("localhost", "root", "haslo")or die("Nie można nawiązać połączenia z bazą");
  3. mysql_select_db("db")or die("Wystąpił błąd podczas wybierania bazy danych");
  4.  
  5.  
  6.  
  7. $id = mysql_real_escape_string($_GET['id']); //przefiltruj dane bo ktoś sprytny zrobi ci mysql injection
  8. $pt = mysql_real_escape_string($_GET['pt'] + 1);
  9. echo $id;
  10. echo $pt;
  11.  
  12. $pytanie = "UPDATE obrazki SET punkty=".$pt." WHERE id=".$id."" ;
  13. mysql_query($pytanie);
  14. }




To umieszczasz normalnie w body jako doklejenie funkcji dla inputa
[JAVASCRIPT] pobierz, plaintext
  1. document.getElementById('id_twojego_inputa').onclick = function() {
  2. ajax( {
  3. type: "GET",
  4. url: "index.php.php?id=2&pt=5",
  5. onError: function(msg) {
  6. console.warn(msg)
  7. },
  8. onSuccess: function(msg) {
  9. //tu jakas funkcja ktora cos robi na zwróconych danych w formie text-u lub xml ty chcesz dokonać polaczenia i aktualizacji danych w bazie więc może tak ale nie testowałem czy zadziała
  10. <?php polacz(); ?>
  11. }
  12. });
  13. }
[JAVASCRIPT] pobierz, plaintext


To umieszczasz w sekcji head
[JAVASCRIPT] pobierz, plaintext
  1. function ajax( options ) {
  2. options = {
  3. type: options.type || "POST",
  4. url: options.url || "",
  5. onComplete: options.onComplete || function(){},
  6. onError: options.onError || function(){},
  7. onSuccess: options.onSuccess || function(){},
  8. dataType: options.dataType || "text"
  9. };
  10.  
  11. var xml = new XMLHttpRequest();
  12. xml.open(options.type, options.url, true);
  13.  
  14. xml.onreadystatechange = function(){
  15. if ( xml.readyState == 4) {
  16. if ( httpSuccess( xml ) ) {
  17. var returnData = (options.dataType=="xml")? xml.responseXML : xml.responseText
  18. options.onSuccess( returnData );
  19. } else {
  20. options.onError();
  21. }
  22. options.onComplete();
  23. xml = null;
  24. }
  25. };
  26.  
  27. xml.send();
  28.  
  29. function httpSuccess(r) {
  30. try {
  31. return ( r.status >= 200 && r.status < 300 || r.status == 304 || navigator.userAgent.indexOf("Safari") >= 0 && typeof r.status == "undefined")
  32. } catch(e) {
  33. return false;
  34. }
  35. }
  36. }
[JAVASCRIPT] pobierz, plaintext

Go to the top of the page
+Quote Post
#luq
post
Post #5





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Trochę odbiegnę od tematu ale, @amii możesz wytłumaczyć ten kawałek kodu:

[JAVASCRIPT] pobierz, plaintext
  1. function httpSuccess(r) {
  2. try {
  3. return ( r.status >= 200 && r.status < 300 || r.status == 304 || navigator.userAgent.indexOf("Safari") >= 0 && typeof r.status == "undefined")
  4. } catch(e) {
  5. return false;
  6. }
  7. }
[JAVASCRIPT] pobierz, plaintext


Kod odpowiedzi HTTP numer 206
Kod
206     Partial Content     Część zawartości – serwer zrealizował tylko część zapytania typu GET, odpowiedź musi zawierać nagłówek Range informujący o zakresie bajtowym zwróconego elementu

Chyba w tym przypadku nie powinno być okej.

Jakiś wyjątek dla Safari... że niby co Safari nie zwraca poprawnych nagłówków HTTP? W ogóle w warunku najpierw porównujesz e.status a na samym końcu sprawdzasz czy jest undefined. http://frontend.pl/2010/12/undefined-jest-be/

Być może ma to jakiś głębszy sens, którego narazie nie rozumiem, wyjaśnij, rzuć linkiem bo IMHO ciekawe (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
amii
post
Post #6





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


#luq to co wkleiłem to nie mój kod to tak na marginesie (IMG:style_emoticons/default/winksmiley.jpg) kod pochodzi z tego notabene bardzo dobrego kursu JS -> http://www.doman.art.pl/kursjs/kurs/ajax/ajax.html

Ten kawałek kodu zwraca true lub false w zależności od tego czy została zwrócona poprawna strona kodowa. Przeglądarka może np. zwrócić kod 404 itp. co oznacza błąd, dzięki temu mamy zapewnioną obsługę wyjątku dla tego typu sytuacji.

W tym kodzie źródłowym mimo, że kurs jak napisałem jest dobry to mogą być błędy. Zauważyłem klika przerabiając kurs a kodu nie testowałem więc.... trzeba by to przetestować.

[JAVASCRIPT] pobierz, plaintext
  1. xml.onreadystatechange = function(){
  2. if ( xml.readyState == 4) { //najpierw sprawdzamy czy dane są zwrócone i gotowe do użycia. Jeśli tak readyState obiektu XMLHttpRequest (u nas xml) zwróci 4 to znaczy, że są
  3. if ( httpSuccess( xml ) ) { //później testujemy w wewnętrznej funkcji czy przeglądarka zwraca kody z prawidłowego przedziału. O tym Safari przeczytaj najlepiej w źródle
  4. var returnData = (options.dataType=="xml")? xml.responseXML : xml.responseText
  5. options.onSuccess( returnData );
  6. } else {
  7. options.onError();
  8. }
  9. options.onComplete();
  10. xml = null;
  11. }
  12. };
[JAVASCRIPT] pobierz, plaintext


Ten post edytował amii 30.12.2010, 13:42:30
Go to the top of the page
+Quote Post
#luq
post
Post #7





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Cytat(amii @ 30.12.2010, 13:38:48 ) *
Ten kawałek kodu zwraca true lub false w zależności od tego czy została zwrócona poprawna strona kodowa. Przeglądarka może np. zwrócić kod 404 itp. co oznacza błąd, dzięki temu mamy zapewnioną obsługę wyjątku dla tego typu sytuacji.

Sprostowanie - nie żadnej strony kodowej a nagłówek odpowiedzi przesyłany przez serwer.

Ja dokładnie wiem co ma robić ten kod tylko zdziwił mnie ten warunek, sprawdzanie zakresu nagłówków, wyjątek dla Safari i to wszystko wrzucone w try + catch...
W podanym przez Ciebie linku dostałem w sumie wyjaśnienie. Musze obadać dokładnie nagłówki z zakresu 200 - 300 oraz 304 i zobaczyć ten błąd na Safari (IMG:style_emoticons/default/winksmiley.jpg)

Ale ja bym jednak napisał to tak:

[JAVASCRIPT] pobierz, plaintext
  1. function httpSuccess(r) {
  2. if('object' === typeof r){
  3. return (r.status >= 200 && r.status < 300 || 304 == r.status || navigator.userAgent.indexOf("Safari") >= 0 && 'undefined' === typeof r.status);
  4.  
  5. }
  6. else{
  7. return (navigator.userAgent.indexOf("Safari") >= 0);
  8. }
  9. }
[JAVASCRIPT] pobierz, plaintext


Wtedy nie trzeba tego w try pchać (który jest w JS`ie strasznie wolny) i nie wysypie nam się z powodu braku pola status w zmiennej r.
Go to the top of the page
+Quote Post
bim2
post
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Do tematu wracając.

Jak zapisujesz jakies dane które dodajesz o 1 to nie przekazuj ich poprzez url, bo kazdy na to wpłynie i doda więcej punktów. Przekazuj tylko id i zrób tak:
  1.  
  2. $pytanie = "UPDATE obrazki SET punkty=punkty+1 WHERE id=".$id."" ;


Tlumacząc:
Cytat
UPDATE obrazki SET punkty=punkty+1 WHERE
Uaktualnij tablę obrazki zmieniając kolumnę punkty na (pobierz wartość z kolumny punkty + 1).


Mam nadzieję, ze w miare ok wytłumaczyłem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.09.2025 - 20:19